/*!
 * 文件名称： main.c
 * 描    述： EXTI-按键中断检测实验主函数文件
 * 版本：     2023-12-03, V1.0
*/

/*
* GD32F303东方红开发板V1.0
* 淘宝商城：   https://juwo.taobao.com
* 技术交流：   https://www.gd32bbs.com/ask/
* 视频学习：   https://space.bilibili.com/475462605
* 微信公众号： gd32bbs
* Copyright    苏州聚沃电子科技有限公司
* 版权所有，盗版必究。
*/

#include "gd32f30x.h"
#include <stdio.h>
#include "bsp_led.h"
#include "bsp_key.h"
#include "bsp_uart.h"
#include "driver_public.h"

/* 按键中断回调 */
void ROCKER_KEY_IRQHandler(typdef_gpio_general *KEYx_IO)
{
    if(SET==bsp_key_state_get(&ROCKER_KEY))
    {
        ROCKER_KEY.press_timerms=PRESS_DOWN; 
        bsp_led_toggle(&LED0);  
        bsp_led_toggle(&LED1);
    } 
}


/*!
* 说明     main函数
* 输入     无
* 返回值   无
*/
int main(void)
{
    driver_init();
    bsp_led_group_init();
    bsp_led_on(&LED0);
    bsp_led_off(&LED1);      
    
	  /* 配置按键为中断模式，并注册按键回调函数 */
    ROCKER_KEY.key_gpio->gpio_mode = INT_LOW;
    ROCKER_KEY.key_gpio->int_callback = ROCKER_KEY_IRQHandler;    
    bsp_key_init(&ROCKER_KEY);
    nvic_irq_enable(EXTI2_IRQn,0,0);
	
    bsp_uart_init(&BOARD_UART);
    delay_ms(1000);    
    printf_log("Example of key interrupt detection.\r\n");
    
		while (1)
		{
        if(ROCKER_KEY.press_timerms == PRESS_DOWN)
        {
					  /* 检测到按键被按下 */
            ROCKER_KEY.press_timerms = PRESS_NONE;
            printf_log("ROCKER_KEY is pressed to trigger an interrupt.\r\n");
        }
		}
}

